RCS "$Id: Act.sig,v 1.5 1998/08/13 11:37:09 pxs Exp $";
(************************************ Act ************************************)
(*                                                                           *)
(* Interface for the CWB independent of any particular PA.                   *)
(*                                                                           *)
(*****************************************************************************)
signature ACT =
sig
   type act
(* I'd like to get rid of eps and tau real soon, keeping just observable *)
   val tau      : act
   val eps      : act
(* e.g. in CCS, tau, eps and step are not observable, other actions are *)
   val observable : act -> bool
   val hashval  : act -> word
(* 'a <--> a *)
   val inverse  : act -> act
(* make an action out of a string, using conventional 'a, tau, eps, 1*)
   val mkact    : string -> act
   val mkstr    : act -> string
   val eq       : act * act -> bool
(* Tau < Eps < Step < a < a' (then lexicographic) *)       
   val le       : act * act -> bool
(* i.e. can this be a FP to a proposition. Not nec to do with param agents *)
(* The idea is, since fps aren't (ARGH!) distinguishable *)
(* by their types, at least to rule out absurdities like tau as a formal *)
(* parameter. *)
   val checkCanBeFormalActionParam : act -> unit
(* Read an action from Lexing's input stream. *)
   val readAct : unit -> act
     
   structure ActionSet : ORDERED_SET
   where type Element.element = act
(* Will raise ErrorWithReset if variable is unbound *)
   val actionSetEnvLookup : V.var -> ActionSet.set
end

